进程 = 运行中的程序

一个程序是存储在文件中的机器指令序列. 一般它由编译器将源码编译成二进制格式 的代码. 运行一个程序以为着将这个机器指令序列载入内存然后让处理器(CPU)逐条 执行这些指令.

通过学习命令 ps 学习进程

进程存在于用户空间. 用户空间存放运行的程序和它们的数据的一部分内存空间.

每个进程都有一个可以唯一标识它的数字, 称为 PID.

ps 的 -a 选项列出所有进程, 包括在其他终端有其他用户运行的程序. 但是带有选项 -a 的输出并不包括 shell. ps 也有一个 -l 选项来打印更过细节.

  1. S 表示状态, R 说明进程正在运行. S 表示处于休眠状态
  2. PRI 和 NI 分别是进程的优先级和 niceness 级别.
  3. SZ 表示进程所占的内存大小
  4. WCHAN 列显示进程睡眠的原型

系统进程

除了用户运行的进程外, 其他一些是 Unix 系统用来完成系统任务的进程.

进程管理和文件管理

每个进程属于某个用户ID, 有一定的大小, 一个起始时间, 已运行的时间, 优先级和 niceness 级别. 有些进程与某个终端相连, 而其他一些则没有.

文件包含数据, 进程包含可执行代码. 文件有一些属性, 进程也有一些属性. 内核建 立和销毁文件, 进程类似. 就像管理磁盘的多个文件, 内核管理内存中的多个进程, 为它们分配空间, 并记录内存分配情况

内存和程序

进程这个概念有些抽象, 但它代表了一些非常实际的实体: 内存中的一些字节.

Unix 系统中的内存分为系统空间和用户空间. 进程存在与用户空间. 内存实际上是一 个字节序列, 或者一个很大的数组. 如果机器有 64MB 的内存, 那意味着这个数组 大约 6700 万个内存位置. 其中一些用来存放组成内核的机器指令和数组.

还有一些存放组成进程的机器指令和数据. 一个进程不一定必须要占一段连续的内存. 就像文件在磁盘上被分成小块, 进程在内存也被分成小块. 同样和文件有记录分配了 磁盘块的列表相似, 进程也有保存分配到内存页面(memory pages)的数据结构.因此, 就爱那个进程表示为用户空间内的一个小方块只是某种程度的抽象.